home *** CD-ROM | disk | FTP | other *** search
/ Aminet 19 / Aminet 19 (1997)(GTI - Schatztruhe)[!][Jun 1997].iso / Aminet / gfx / misc / PVKat.lha / PVKat / PVKat.rexx < prev   
OS/2 REXX Batch file  |  1997-03-13  |  12KB  |  404 lines

  1. /*********************/
  2. /* PicView Kataloger */
  3. /*********************/
  4.  
  5. /*: Standarteinsellungen */
  6.  
  7. arg con
  8.  
  9. options results
  10. numeric digits 3
  11. signal on BREAK_C
  12.  
  13. et      = '0A'x
  14. az      = '"'
  15. homedir = Pragma(D)
  16.  
  17. if ~show('L','rexxMOOS.library')  then addlib("rexxMOOS.library",100,-30)
  18. if ~show('L','rexxMOOS.library')  then call MOOSERROR
  19. /*=*/
  20.  
  21. /*: Variable */
  22.  
  23. tag = 'Pub PicView ReqPos CENTERSCR'
  24. qdir = homedir
  25. if exists("s:PVKat.pref")
  26.   then
  27.     do
  28.       if ~readargs(ReadBlock('s:pvkat.pref'),"tag2/A,minkb/A/N,maxmb/A/N,zs/A/N,ua/A/N,pvdir/A,skat/A,tempdir/A,ekat/A/N") then call PREFSERROR
  29.              /* tag2    = Multiselect-Tag                */
  30.              /* minkb   = System-Speicher minimum        */
  31.              /* maxmb   = Katalog Speichergrösse maximum */
  32.              /* zs      = Absturtzsicherung              */
  33.              /* ua      = Unterverzeichnis Abfrage       */
  34.              /* pvdir   = PicView Verzeichnis            */
  35.              /* skat    = Satandart Katalog Verzeichnis  */
  36.              /* tempdir = Temporeres Fest-Verzeichnis    */
  37.              /* ekat    = Automatischer Ersatzkatalog    */
  38.       kat.drawer = skat
  39.     end
  40.   else
  41.     do
  42.       minkb   = 1024
  43.       maxmb   = 4
  44.       tempdir = qdir
  45.       pvdir   = "PicView:"
  46.       skat    = qdir
  47.       call GOPTION
  48.       call OPTION
  49.       kat.drawer = skat
  50.     end
  51. kat.filename = ""
  52. auto         = 0                    /* Automatisirung                     */
  53. smode        = 0
  54. qdirm.count  = 0                    /* Multiselect erkennung              */
  55. index        = 2                    /* Startindex zu Sicherheitskatalogen */
  56. zusatz.0     = '.tempa'             /* Sicherheitskatalogerweiterung 0    */
  57. zusatz.1     = '.tempb'             /* Sicherheitskatalogerweiterung 1    */
  58. zusatz.2     = ''                   /* Sicherheitskatalogerweiterung 2    */
  59.  
  60. filetexthead = '/* PVKat Auto-Rexx-Liste */'et et
  61. filetexthead = filetexthead || 'parse arg bildnr katalog'et
  62. filetexthead = filetexthead || 'katalog = compress(katalog)'et et
  63. filetexthead = filetexthead || 'options results'et
  64. filetexthead = filetexthead || 'options failat 6'et et
  65. filetexthead = filetexthead || "if ~show('L','rexxMOOS.library')  then addlib("az"rexxMOOS.library"az",100,-30)"et
  66. filetexthead = filetexthead || "if ~show('L','rexxMOOS.library')  then exit 10"et et
  67. filetexthead = filetexthead || "az   = '"az"'"et et
  68. filetexthead = filetexthead || 'exall("'tempdir'PV.rexx","temp. Fields 3")'et
  69. filetexthead = filetexthead || 'memo = ('minkb' * 1024) - temp.0.size'et
  70. filetexthead = filetexthead || 'if memo < 524288 then memo = 524288'et et
  71. filetexthead = filetexthead || "address command 'avail >nil: flush'"et
  72. filetexthead = filetexthead || 'address PICVIEW.1'et
  73. filetexthead = filetexthead || 'signal value(bildnr)'et et
  74.  
  75. filetextmem = "execute('avail total','temp.')"et
  76. filetextmem = filetextmem || 'if temp.0 < memo then exit'et
  77. /*=*/
  78.  
  79. /*: Programm überprüfung */
  80.  
  81. if ~show('P','PICVIEW.1')
  82.  then
  83.    do
  84.      address COMMAND 'run >nil: "'pvdir'PicView"'
  85.      waitforport PICVIEW.1
  86.      call Delay(250)
  87.    end
  88. if exists(tempdir'pv.rexx') then call ABSTURTZ
  89. /*=*/
  90.  
  91. /*: Modus-Wahl */
  92. modus:
  93.  
  94. text = "Welchen Modus?"
  95. auto = rqteasyreq(text,'_Manuel|_Automatisch|*_EXIT*|_OPTION Title "Modus-Wahl" 'tag)
  96. if auto = 0
  97.   then
  98.     do
  99.       call OPTION
  100.       signal modus
  101.     end
  102. if auto = 3 then exit 0
  103. if ua = 1 & smode = 0 then call UNT
  104. if auto = 2 & smode = 0 then call KAT
  105. smode = 1
  106. /*=*/
  107.  
  108. /*: Quell- und Katalog-Verzeichnis */
  109.  
  110. If auto = 2 then call MAXTEST
  111.             else call KAT
  112. do forever
  113.   oldqdir = qdir
  114.   qdir = rqtfilereq(,qdir,'Title "gebe Quelle an" Stem "qdirm."' tag2 tag)
  115.   if qdir ~= "" then break
  116.   qdir = oldqdir
  117. end
  118. if ua = 0 then call UNT
  119. /*=*/
  120.  
  121. /*: List Anweisung */
  122.  
  123. address REXX
  124. if exists(tempdir"temp.list") then address command 'delete >nil: 'tempdir'temp.list'
  125. if qdirm.count = 0 then address command 'list 'qdir' >'tempdir'temp.list 'listtag' lformat %f%S'
  126.   else
  127.     do i=0 to qdirm.count-1
  128.       address command 'list 'addpart(qdirm.drawer,qdirm.i)' >>'tempdir'temp.list 'listtag' lformat %f%S'
  129.     end
  130. qdir = qdirm.drawer
  131. drop qdirm.
  132. bild = 0
  133. index = 2
  134. Open(quelle,tempdir"temp.list",r)
  135. WriteBlock(tempdir"PV.rexx",filetexthead)
  136. do forever
  137.   if eof(quelle) then leave
  138.   file = readln(quelle)
  139.   if file = "" then iterate
  140.   if zs = 1
  141.     then
  142.       do
  143.         bild = bild + 1
  144.         index = bittst(bild,0)
  145.         filetextbild = bild':'et
  146.         if bild = 1 then filetextbild = filetextbild || 'WriteBlock("'tempdir'bild.temp","'bild' 2")'et
  147.                     else filetextbild = filetextbild || 'WriteBlock("'tempdir'bild.temp","'bild' 'value(~index)'")'et
  148.         WriteBlock(tempdir"PV.rexx",filetextbild,Append)
  149.       end
  150.   filetext = filetextmem || 'ADDPIC "'file'"'et
  151.   if zs = 1 then filetext = filetext || 'saveproject az || katalog || 'az || zusatz.index || az' || az'et et
  152.   WriteBlock(tempdir"PV.rexx",filetext,Append)
  153. end
  154. if zs = 0 then filetextend = 'saveproject az || katalog || az'et
  155.   else
  156.     do
  157.       filetextend = et et'address command'et
  158.       filetextend = filetextend || "if exists(katalog) then 'delete >nil: 'az || katalog || az"et
  159.       filetextend = filetextend || "'rename >nil: 'az || katalog || "az || zusatz.index || az" || az az || katalog || az"et
  160.       filetextend = filetextend || "'delete >nil: 'az || katalog || "az || zusatz.0 || az" || az"et
  161.       filetextend = filetextend || "'delete >nil: 'az || katalog || "az || zusatz.1 || az" || az"et
  162.     end
  163. filetextend = filetextend || "address command 'delete >nil: "tempdir"mem.temp "tempdir"bild.temp'"et
  164. WriteBlock(tempdir"PV.rexx",filetextend,Append)
  165. Close(quelle)
  166. address command 'delete >nil: 'tempdir'temp.list'
  167. /*=*/
  168.  
  169. /*: Katalog erstellen */
  170.  
  171. bildnr = 1
  172. call LIST
  173. signal modus
  174. /*=*/
  175.  
  176. exit 0
  177.  
  178.  
  179. /* Unter-Programme */
  180.  
  181. /*: KAT */
  182. KAT:
  183. address PICVIEW.1
  184. do forever
  185.   katalog = rqtfilereq(kat.filename,kat.drawer,'Title "Katalog" Stem kat.' tag)
  186.   if katalog ~= "" then break
  187. end
  188. call MAXTEST
  189. if exists(katalog)
  190.   then
  191.     do
  192.       openproject katalog
  193.       text = "Wollen sie den Katalog:"et || katalog || et"mit der momentanen Grösse von"et || (byte.0.size/1024)/1024 "MByte"et" erweitern?"
  194.       res = rqteasyreq(text,'_Ja|Über_schreiben|_Nein title "Katalog existirt"' tag)
  195.       if res = 0 then call KAT
  196.       if res = 1 then uebs = 0
  197.                  else uebs = 1
  198.       if res = 2 then newproject force
  199.     end
  200.   else
  201.     do
  202.       newproject force
  203.       uebs = 0
  204.     end
  205. return
  206. /*=*/
  207.  
  208. /*: OPTION */
  209. OPTION:
  210. text = "Grundeinstellung ändern"
  211. res = rqteasyreq(text,'_Nein|_Ja Title "Grundeinstellung"'tag)
  212. if res = 0 then call GOPTION
  213. text = "Welchen Modus soll der Bildverzeichnis-Requester haben?"
  214. res = rqteasyreq(text,'_Multiselect|_Einzel-Verzeichnise Title "Requester-Modus"' tag)
  215. if res = 1 then tag2  = 'Flags MULTI|SELDIRS'
  216.            else tag2  = 'Flags NOFILES'
  217. text = "Sollen Ersatzkataloge automatisch erstellt werden"
  218. ekat = ~rqteasyreq(text,'_Nein|_Ja Title "Ersatzkataloge"' tag)
  219. text = "Wieviel System-Speicher in kByte soll übrig bleiben"
  220. minkb = rqtlongreq(text,'Number 'minkb' Title "Speicherabfrage"' tag)
  221. text = "Wiviel Speicher in MByte darf der Katalog haben?"
  222. maxmb = rqtlongreq(text,'Number 'maxmb' Title "Speicherabfrage"' tag)
  223. text = "Ständife Unterverzeichnise abfrage?"
  224. ua = rqteasyreq(text,'_Nein|_Ja Title "Sicherungs-Kataloge"' tag)
  225. text = "Soll die Option gespeichert werden?"
  226. if exists("s:PVKat.pref") then res = rqteasyreq(text,'_Ja|_Nein Title "Option speichern"' tag)
  227.                           else res = 1
  228. if res = 1
  229.   then
  230.     do
  231.       pref = '"'tag2'"' minkb maxmb zs ua '"'pvdir'"' '"'skat'"' '"'tempdir'"' ekat
  232.       WriteBlock("s:PVKat.pref",pref)
  233.     end
  234. return
  235. /*=*/
  236.  
  237. /*: GOPTION */
  238. GOPTION:
  239. pvdir = rqtfilereq(,pvdir,'Title "Bitte PicView-Verzeichnis angeben."' tag 'Flags NOFILES')
  240. skat = rqtfilereq(,skat,'Title "Standart Katalog-Verzeichniss"' tag 'Flags NOFILES')
  241. tempdir = rqtfilereq(,tempdir,'Title "Temp-Verzeichnis"' tag 'Flags NOFILES')
  242. text = "Sollen Absturz gesichert gearbeitet werden?"
  243. zs = rqteasyreq(text,'_Ja|_Nein Title "Sicherungs-Kataloge"' tag)
  244. return
  245. /*=*/
  246.  
  247. /*: ABSTURTZ */
  248. ABSTURTZ:
  249. text = "Sie hatten einen Systemabsturtz"et"Möchten sie die abgebrochene Archivirung weitermachen"
  250. if con = "CONTINUE" then res = 1
  251.                     else res = rqteasyreq(text,'_Ja|_Nein Title "Absturtz"' tag)
  252. if res = 1
  253.   then
  254.     do
  255.       if ~readargs(readblock(tempdir'kat.temp'),"katalog/A,qdir/A,uebs/A/N") then call KATERROR
  256.       if res = 0 then break
  257.       if ~readargs(readblock(tempdir'bild.temp'),"bildnr/A/N,index/A/N") then call BILDERROR
  258.       if res = 0 then break
  259.       if exists(tempdir'fehler.temp') then if compress(readblock(tempdir'fehler.temp'),et) = bildnr then bildnr = bildnr + 1
  260.       if ~exists(katalog || zusatz.index) then call KATALOGERROR
  261.       if (uebs = 1 & bildnr = 1) | res = 2 then address PICVIEW.1 'newproject force'
  262.                                            else address PICVIEW.1 'openproject "'katalog || zusatz.index'"'
  263.       call LIST
  264.     end
  265. drop con
  266. return
  267. /*=*/
  268.  
  269. /*: ABBRUCH */
  270. ABBRUCH:
  271. if ~readargs(readblock(tempdir'bild.temp'),"bildnr/A/N,index/A/N") then call BILDERROR
  272. if res = 0 then return
  273. if index ~= 2
  274.   then
  275.     do
  276.       address command
  277.       if exists(katalog) then 'delete >nil: 'katalog
  278.       'rename >nil: 'katalog || zusatz.index katalog
  279.       'delete >nil: 'katalog || zusatz.0
  280.       'delete >nil: 'katalog || zusatz.1
  281.     end
  282. if ekat = 1 | con = "CONTINUE"
  283.   then
  284.     do
  285.       call EKAT
  286.     end
  287.   else
  288.     do
  289.       text = "Ihr System-Speicher ist unter den angegebenen Minimalwert gefallen"et"Sie müssen einen neuen Katalognamen wählen"
  290.       rqteasyreq(text,'_OK Title "geringer System-Speicher"' tag)
  291.       call KAT
  292.       text = "Wollen sie die Archivirung neu beginnen oder einfach weitermachen"
  293.       res = rqteasyreq(text,'_Neubegin|_Weitermachen Title "geringer System-Speicher"' tag)
  294.       if res = 1 then bildnr = 1
  295.     end
  296. address PICVIEW.1 newproject force
  297. call LIST
  298. return
  299. /*=*/
  300.  
  301.  
  302. /* Unter Routinen */
  303.  
  304. /*: UNT */
  305. UNT:
  306. text = "Sollen auch die Unterverzeichnise"et"archivirt werden?"
  307. res = rqteasyreq(text,'_Ja|_Nein Title "Unterverzeichnis rückfrage"' tag)
  308. if res = 1 then listtag = "files all"
  309.            else listtag = "files"
  310. /*=*/
  311.  
  312. /*: MAXTEST */
  313. MAXTEST:
  314. if ~exists(katalog) then return
  315. exall(katalog,'byte. Fields 3')
  316. if (byte.0.size/1024)/1024 > maxmb
  317.   then
  318.     do
  319.       text = "Katalog ist grösser als sie zugelassen haben."
  320.       rqteasyreq(text,'_OK Title "Katalog zu gross"' tag)
  321.       katalog = oldkat
  322.       call KAT
  323.     end
  324. return
  325. /*=*/
  326.  
  327. /*: EKAT */
  328. EKAT:
  329. if lastpos('.',katalog) = length(katalog)-1 then katalog = delstr(katalog,lastpos('.',katalog))
  330. i=0
  331. do forever
  332.   i = i + 1
  333.   if ~exists(katalog || '.' || i)
  334.     then
  335.       do
  336.         katalog = katalog || '.' || i
  337.         return
  338.       end
  339. end
  340. return
  341. /*=*/
  342.  
  343. /*: LIST */
  344. LIST:
  345. address REXX
  346. writeblock(tempdir"kat.temp",'"'katalog'" "'qdir'" 'uebs)
  347. address command 'rx 'tempdir'pv.rexx 'bildnr katalog
  348. address command 'delete >nil: 'tempdir'kat.temp 'tempdir'mem.temp'
  349. if exists(tempdir'bild.temp') then call ABBRUCH
  350. address command 'delete >nil: 'tempdir'pv.rexx'
  351. return
  352. /*=*/
  353.  
  354.  
  355. /* Fehler */
  356.  
  357. /*: Break */
  358. BREAK_C:
  359. exit 10
  360. /*=*/
  361.  
  362. /*: Moos.library Fehler */
  363. MOOSERROR:
  364. say 'Kann "rexxMOOS.library" nicht finden'
  365. exit 10
  366. /*=*/
  367.  
  368. /*: Prefs Fehler */
  369. PREFSERROR:
  370. text = 'fehler beim lesen der Prefs-Datei'
  371. rqteasyreq(text,'_OK Title "Prefs Frehler"' tag)
  372. exit 10
  373. /*=*/
  374.  
  375. /*: Temporary-dateifehler "Kat.Temp" */
  376. KATERROR:
  377. text = 'Fehler beim lesen der Temporary-datei "Kat.Temp"'
  378. rqteasyreq(text,'_OK Title "Kat-Temp Frehler"' tag)
  379. res = 0
  380. Return
  381. /*=*/
  382.  
  383. /*: Temporary-dateifehler "Bild.Temp" */
  384. BILDERROR:
  385. text = 'Fehler beim lesen der Temporary-datei "bild.Temp"'et
  386. test = text || 'Wollen sie denn eingegebenen Katalog neu Anfangen'
  387. if con = "CONTINUE" then res = 1
  388.                     else res = rqteasyreq(text,'_Neu|_Abbruch Title "Kat-Temp Frehler"' tag)
  389. if res = 0 then return
  390. index = 2
  391. bildnr = 1
  392. Return
  393. /*=*/
  394.  
  395. /*: Katalog-Datei nicht gefunden */
  396. KATALOGERROR:
  397. text = 'Konnte keinen Startkatalog finden'
  398. if con = "CONTINUE" then res = 2
  399.                     else rqteasyreq(text,'_OK Title "Katalog Fehler"' tag)
  400. res = 2
  401. return
  402. /*=*/
  403.  
  404.